package main

import (
	"database/sql"
	"time"

	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

// 定义模型
// 两个单词组成的列名会用_分割, MemberNumber → member_number
// 可以用结构体tag指定列名 `gorm:"column:user_age"`
type User struct {
	gorm.Model   //内嵌gorm.Model
	Name         string
	Age          sql.NullInt64 `gorm:"column:user_age"` //零值类型
	Birthday     *time.Time
	Email        string  `gorm:"type:varchar(100);unique_index"` //unique 指不能重复
	Role         string  `gorm:"size:255"`                       // 设置字段大小为255
	MemberNumber *string `gorm:"unique;not null"`                // 设置会员号（member number）唯一并且不为空
	Num          int     `gorm:"AUTO_INCREMENT"`                 // 设置 num 为自增类型
	Address      string  `gorm:"index:addr"`                     // 给address字段创建名为addr的索引
	IgnoreMe     int     `gorm:"-"`                              // 忽略本字段
}

type Animal struct {
	AnimalID int64 `gorm:"primary_key"` //选择其作为主键
	Name     string
	Age      string
}

// 更改表名
func (Animal) TableName() string {
	return "flm"
}

func main() {
	//连接MYSQL数据库
	dsn := "root:flm@(127.0.0.1:3306)/db1?charset=utf8mb4&parseTime=True&loc=Local"
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		panic(err)
	}

	db.AutoMigrate(&User{})
	db.AutoMigrate(&Animal{})

	//使用Animal结构体创建名为 xxx 的表
	//db.Table("xxx").Migrator().CreateTable(&Animal{})
}

// drop table 表明; 删除表
